package Leetcode;

public class 力扣26_删除排序数组中的重复项 {

    /**
     * 官网算法：双指针法
     * 快指针和慢指针 指向的数据不一样 就把快指针数据放到慢指针后面 慢指针进一
     * 如果相等 快指针指向下一个数据
     * 这里有个问题：如果是[1,2]
     * 快慢相等 会把会把快指针的数据放到慢指针前面 也就是放到了1这个位置本身 多余了一步操作
     */
    static int removeDuplicates(int[] nums) {
        if (nums.length == 0) return 0;
        int i = 0;
        for (int j = 1; j < nums.length; j++) {
            if (nums[j] != nums[i]) {
                nums[++i] = nums[j];
            }
        }
        return i + 1;
    }

    /**
     * 对上面算法做了调整
     * 先判断是否相同 相同快指针进一 避免多余复制 并且避免了一次循环
     * 快指针进一后 判断是否不想等 不想等就复制数据
     */
    static int removeDuplicates1(int[] nums) {
        int i = 0, j = 1;
        while (j < nums.length) {
            if (nums[i] == nums[j]) {
                j++;
            }
            if (j < nums.length && nums[i] != nums[j]) {
                nums[++i] = nums[j];
            }
        }
        return i + 1;
    }

    public static void main(String[] args) {
        int[] ints = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4};
        int l = removeDuplicates1(ints);
        for (int i = 0; i < l; i++) {
            System.out.print(ints[i] + "\t");
        }
    }
}
